/**
 * @author Roger Wu
 * @version 1.0
 */
(function($) {
    $.fn.extend({jresize: function(options) {
            if (typeof options == 'string') {
                if (options == 'destroy')
                    return this.each(function() {
                        var dialog = this;
                        $("div[class^='resizable']", dialog).each(function() {
                            $(this).hide();
                        });
                    });
            }
            return this.each(function() {
                var dialog = $(this);
                var resizable = $(".resizable");
                $("div[class^='resizable']", dialog).each(function() {
                    var bar = this;
                    $(bar).mousedown(function(event) {
                        $.pdialog.switchDialog(dialog);
                        $.resizeTool.start(resizable, dialog, event, $(bar).attr("tar"));
                        return false;
                    }).show();
                });
            });
        }});
    $.resizeTool = {
        start: function(resizable, dialog, e, target) {
            $.pdialog.initResize(resizable, dialog, target);
            $.data(resizable[0], 'layer-drag', {
                options: $.extend($.pdialog._op, {target: target, dialog: dialog, stop: $.resizeTool.stop})
            });
            $.layerdrag.start(resizable[0], e, $.pdialog._op);
        },
        stop: function() {
            var data = $.data(arguments[0], 'layer-drag');
            $.pdialog.resizeDialog(arguments[0], data.options.dialog, data.options.target);
            $("body").css("cursor", "");
            $(arguments[0]).hide();
        }
    };
    $.layerdrag = {
        start: function(obj, e, options) {
            if (!$.layerdrag.current) {
                $.layerdrag.current = {
                    el: obj,
                    oleft: parseInt(obj.style.left) || 0,
                    owidth: parseInt(obj.style.width) || 0,
                    otop: parseInt(obj.style.top) || 0,
                    oheight: parseInt(obj.style.height) || 0,
                    ox: e.pageX || e.screenX,
                    oy: e.pageY || e.clientY
                };
                $(document).bind('mouseup', $.layerdrag.stop);
                $(document).bind('mousemove', $.layerdrag.drag);
            }
            return $.layerdrag.preventEvent(e);
        },
        drag: function(e) {
            if (!e)
                var e = window.event;
            var current = $.layerdrag.current;
            var data = $.data(current.el, 'layer-drag');
            var lmove = (e.pageX || e.screenX) - current.ox;
            var tmove = (e.pageY || e.clientY) - current.oy;
            if ((e.pageY || e.clientY) <= 0 || (e.pageY || e.clientY) >= ($(window).height() - $(".dialogHeader", $(data.options.dialog)).outerHeight()))
                return false;
            var target = data.options.target;
            var width = current.owidth;
            var height = current.oheight;
            if (target != "n" && target != "s") {
                width += (target.indexOf("w") >= 0) ? -lmove : lmove;
            }
            if (width >= $.pdialog._op.minW) {
                if (target.indexOf("w") >= 0) {
                    current.el.style.left = (current.oleft + lmove) + 'px';
                }
                if (target != "n" && target != "s") {
                    current.el.style.width = width + 'px';
                }
            }
            if (target != "w" && target != "e") {
                height += (target.indexOf("n") >= 0) ? -tmove : tmove;
            }
            if (height >= $.pdialog._op.minH) {
                if (target.indexOf("n") >= 0) {
                    current.el.style.top = (current.otop + tmove) + 'px';
                }
                if (target != "w" && target != "e") {
                    current.el.style.height = height + 'px';
                }
            }
            return $.layerdrag.preventEvent(e);
        },
        stop: function(e) {
            var current = $.layerdrag.current;
            var data = $.data(current.el, 'layer-drag');
            $(document).unbind('mousemove', $.layerdrag.drag);
            $(document).unbind('mouseup', $.layerdrag.stop);
            if (data.options.stop) {
                data.options.stop.apply(current.el, [current.el]);
            }
            $.layerdrag.current = null;
            return $.layerdrag.preventEvent(e);
        },
        preventEvent: function(e) {
            if (e.stopPropagation)
                e.stopPropagation();
            if (e.preventDefault)
                e.preventDefault();
            return false;
        }
    };
})(jQuery);